// exports.YpNetMag = void 0;
// var $httpManager = require("../HttpManager");
// var $logManager = require("../LogManager");
// var $playerDataManager = require("../PlayerDataManager");
// var $gameDataManager = require("../GameDataManager");
// var $gameGlobalVariable = require("../GameGlobalVariable");
// var $hallManager = require("../HallManager");
// var $yPNetStorage = require("../YPNetStorage");
// var h = (function () {
//     function t() {}
//     t.initServer = function (e) {
//         return __awaiter(this, void 0, void 0, function () {
//             var t;
//             var o;
//             return __generator(this, function (n) {
//                 switch (n.label) {
//                     case 0:
//                         if (
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.WX &&
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.TT
//                         ) {
//                             return [3, 2];
//                         } else {
//                             return (
//                                 $yPNetStorage.YPNetStorage.init(),
//                                 (t = e.bindingOutUserUid),
//                                 $yPNetStorage.YPNetStorage.initServer(YPSDK.appId, YPSDK.platformUrl, t, e),
//                                 console.log("20"),
//                                 (o = this),
//                                 [4, this.getRemoteStorage()]
//                             );
//                         }
//                     case 1:
//                         o.loadingIn = n.sent();
//                         return this.isFail
//                             ? [2]
//                             : (clearTimeout(this.failtimeId),
//                               (this.isload = !0),
//                               this.loadingIn
//                                   ? (console.log("走走fuwuqi"), this.initLocaSever())
//                                   : (console.log("走走本地"), this.initLoca()),
//                               [3, 3]);
//                     case 2:
//                         console.log("走走本地");
//                         this.isload = !0;
//                         this.initLoca();
//                         n.label = 3;
//                     case 3:
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.failSever = function (e) {
//         var t = this;
//         this.failtimeId = setTimeout(function () {
//             t.isload = !0;
//             t.initLoca();
//             e();
//         }, 1e4);
//     };
//     t.initLocaSever = function () {
//         var e = Number(localStorage.getItem("gameversion"));
//         if (!e) {
//             e = 0;
//         }
//         var t = this.nowSeverData.gameversion;
//         if (!t) {
//             t = 0;
//         }
//         console.log("存储版本对比", "本地->" + e, "服务器->" + t);
//         if (t > e) {
//             $gameDataManager.GameDataMgr.init(this.nowSeverData[$gameDataManager.GameDataMgr.getSecretKey()]);
//             $playerDataManager.PlayerDataMgr.init(this.nowSeverData[$playerDataManager.PlayerDataMgr.getSecretKey()]);
//             $hallManager.HallMgr.init(this.nowSeverData[$hallManager.HallMgr.getSecretKey()]);
//             localStorage.setItem("gameversion", t + "");
//         } else {
//             this.initLoca();
//         }
//     };
//     t.initLoca = function () {
//         $gameDataManager.GameDataMgr.init();
//         $playerDataManager.PlayerDataMgr.init();
//         $hallManager.HallMgr.init();
//     };
//     t.accesUserinfo = function (e) {
//         return __awaiter(this, void 0, Promise, function () {
//             return __generator(this, function () {
//                 return [
//                     2,
//                     new Promise(function (t) {
//                         $httpManager.HttpMgr.requestData(function (e) {
//                             var o;
//                             $logManager.LogMgr.debug("---accesUserinfo(加钱)-->>>>>>res------", e);
//                             if (
//                                 "Success" ==
//                                 (null === (o = null == e ? void 0 : e.errorCode) || void 0 === o ? void 0 : o.code)
//                             ) {
//                                 t(e);
//                             }
//                         }, e);
//                     })
//                 ];
//             });
//         });
//     };
//     t.getUserAppInfo = function (e, t) {
//         return __awaiter(this, void 0, Promise, function () {
//             var o = this;
//             return __generator(this, function () {
//                 return [
//                     2,
//                     new Promise(function (n) {
//                         var r = YPSDK.platformUrl + "/User/AppInfo?appId=" + e + "platformAppId=" + t + "&code=";
//                         o.GetTimeAll++;
//                         if (o.GetTimeAll < 4) {
//                             mg.login({
//                                 success: function (c) {
//                                     return __awaiter(o, void 0, void 0, function () {
//                                         var o;
//                                         return __generator(this, function (i) {
//                                             switch (i.label) {
//                                                 case 0:
//                                                     console.log("获取code:", c.code);
//                                                     r =
//                                                         YPSDK.platformUrl +
//                                                         "/User/AppInfo?appId=" +
//                                                         e +
//                                                         "&platformAppId=" +
//                                                         t +
//                                                         "&code=" +
//                                                         c.code;
//                                                     console.log("userid", e, t, r);
//                                                     return [4, this.accesUserinfo(r, e, t, c)];
//                                                 case 1:
//                                                 case 2:
//                                                     if ((o = i.sent())) {
//                                                         return [3, 4];
//                                                     } else {
//                                                         return [4, this.accesUserinfo(r, e, t, c)];
//                                                     }
//                                                 case 3:
//                                                     o = i.sent();
//                                                     i.label = 4;
//                                                 case 4:
//                                                     console.log("resp:", o);
//                                                     n(o);
//                                                     return [2];
//                                             }
//                                         });
//                                     });
//                                 },
//                                 fail: function (r) {
//                                     return __awaiter(o, void 0, void 0, function () {
//                                         var o;
//                                         return __generator(this, function (i) {
//                                             switch (i.label) {
//                                                 case 0:
//                                                     console.error("获取code失败:", r);
//                                                     return [4, this.getUserAppInfo(e, t)];
//                                                 case 1:
//                                                     o = i.sent();
//                                                     n(o);
//                                                     return [2];
//                                             }
//                                         });
//                                     });
//                                 }
//                             });
//                         }
//                     })
//                 ];
//             });
//         });
//     };
//     t.mapSwitchJson = function (e) {
//         var t = {};
//         e.forEach(function (e, o) {
//             t[o] = e;
//         });
//         return t;
//     };
//     t.cleanData = function (e) {
//         localStorage.clear();
//         this.saveSeverStorage(!0, e);
//     };
//     t.getAllData = function () {
//         var e = $playerDataManager.PlayerDataMgr.getAllData();
//         var t = $gameDataManager.GameDataMgr.getAllData();
//         var o = $hallManager.HallMgr.getAllData();
//         var n = {};
//         n[$playerDataManager.PlayerDataMgr.getSecretKey()] = this.mapSwitchJson(e);
//         n[$gameDataManager.GameDataMgr.getSecretKey()] = this.mapSwitchJson(t);
//         n[$hallManager.HallMgr.getSecretKey()] = this.mapSwitchJson(o);
//         var i = Number(localStorage.getItem("gameversion"));
//         if (!i) {
//             i = 0;
//         }
//         n.gameversion = i;
//         return n;
//     };
//     t.isEmpty = function (t) {
//         if ("object" == typeof t) {
//             var o;
//             for (o in t) return !1;
//             return !0;
//         }
//         return null == t || "null" === t || "undefined" === t || "" === t;
//     };
//     t.transformData = function (e) {
//         if (this.isEmpty(e)) {
//             e = {};
//         }
//         return JSON.stringify(e);
//     };
//     t.dataFormTrans = function (e) {
//         if (this.isEmpty(e)) {
//             return {};
//         } else {
//             return JSON.parse(e);
//         }
//     };
//     t.saveSeverStorage = function (e, t) {
//         if (void 0 === e) {
//             e = !1;
//         }
//         if (void 0 === t) {
//             t = null;
//         }
//         return __awaiter(this, void 0, void 0, function () {
//             var o;
//             var n;
//             var i;
//             var r;
//             return __generator(this, function (a) {
//                 switch (a.label) {
//                     case 0:
//                         if (
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.WX &&
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.TT
//                         ) {
//                             return [3, 3];
//                         } else {
//                             return (o = new Date().getTime() - this.offtime) >
//                                 1e3 * $gameGlobalVariable.GameGlobalVariable.severdatatime || e
//                                 ? ((this.offtime = new Date().getTime()),
//                                   console.log("存档调用时间差", o),
//                                   (n = {}),
//                                   e || (n = this.getAllData()),
//                                   (i = this.transformData(n)),
//                                   [4, $yPNetStorage.YPNetStorage.setStorage("user", i)])
//                                 : [3, 2];
//                         }
//                     case 1:
//                         r = a.sent();
//                         console.log("存档结果", r, i);
//                         if (t) {
//                             t();
//                         }
//                         a.label = 2;
//                     case 2:
//                         return [3, 4];
//                     case 3:
//                         if (t) {
//                             t();
//                         }
//                         a.label = 4;
//                     case 4:
//                         return [2];
//                 }
//             });
//         });
//     };
//     t.getRemoteStorage = function () {
//         return __awaiter(this, void 0, void 0, function () {
//             var e;
//             var t;
//             var o;
//             var n;
//             var i;
//             var r;
//             return __generator(this, function (a) {
//                 switch (a.label) {
//                     case 0:
//                         e = "user";
//                         console.log(
//                             "======>>>>   是否有 本地缓存  ======>>>>",
//                             $yPNetStorage.YPNetStorage.isHaveLocalCache()
//                         );
//                         t = null;
//                         if (
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.WX &&
//                             YPSDK.Common.curChannelData.platformType != YPSDK.GamePlatformType.TT
//                         ) {
//                             return [3, 6];
//                         }
//                         a.label = 1;
//                     case 1:
//                         a.trys.push([1, 4, , 5]);
//                         return [4, this.getUserAppInfo(YPSDK.appId, YPSDK.Common.curChannelData.appId)];
//                     case 2:
//                         o = a.sent();
//                         console.log("获取用户信息", o);
//                         n = o.data.openid;
//                         i = o.data.unionid;
//                         console.log("openid", n);
//                         console.log("unionid", i);
//                         $yPNetStorage.YPNetStorage.initUseKey(n);
//                         return [4, $yPNetStorage.YPNetStorage.getStorageData(e)];
//                     case 3:
//                         t = a.sent();
//                         console.log("======>>>>   云存档数据-【未登录-设置UserKey-获取】  ======>>>>", t);
//                         return [3, 5];
//                     case 4:
//                         r = a.sent();
//                         console.log("getRemoteStorage", r);
//                         return [3, 5];
//                     case 5:
//                         return [3, 7];
//                     case 6:
//                         cc.sys.isBrowser;
//                         a.label = 7;
//                     case 7:
//                         if (t) {
//                             return (this.nowSeverData = this.dataFormTrans(t)), [2, !0];
//                         } else {
//                             return [2, !1];
//                         }
//                 }
//             });
//         });
//     };
//     t.loadingIn = !1;
//     t.isload = !1;
//     t.failtimeId = 0;
//     t.isFail = !1;
//     t.GetTimeAll = 0;
//     t.offtime = 0;
//     t.nowSeverData = null;
//     return t;
// })();
// exports.YpNetMag = h;

import { GameDataMgr } from '../GameDataManager';
import { HallMgr } from '../HallManager';
// import { HttpMgrInstance } from '../HttpManager';
// import { LogMgr } from '../LogManager';
import { PlayerDataMgr } from '../PlayerDataManager';

/**
 * YPNet Manager Class, maintains network-related functions.
 * 建议类名: YPNetworkManager
 */
class GameNetworkManager {
    public static loadingIn: boolean = false;
    public static isLoad: boolean = false;
    public static failTimeId: number = 0;
    public static isFail: boolean = false;
    public static GetTimeAll: number = 0;
    public static offTime: number = 0;
    public static nowServerData: any = null;

    // Constructor
    constructor() { }

    /**
     * Initialize Server
     * @param initParams - Server Initialization Parameters
     * 建议方法名: initializeServer
     */
    public static async initServer(initParams: any): Promise<void> {
        GameNetworkManager.isLoad = true;
        this.initLoca();
        // console.log('走走本地 YpNetMag.isLoad', GameNetworkManager.isLoad);
        return;
        // let timeoutId: NodeJS.Timeout;
        // if (
        //     // YPSDK.Common.curChannelData.platformType !== YPSDK.GamePlatformType.WX &&
        //     // YPSDK.Common.curChannelData.platformType !== YPSDK.GamePlatformType.TT
        // ) {
        //     GameNetworkManager.isLoad = true;
        //     this.initLoca();
        //     console.log('走走本地 YpNetMag.isLoad', GameNetworkManager.isLoad);
        //     return;
        // }

        // const userUid = initParams.bindingOutUserUid;
        // // YPNetStorage.initServer(YPSDK.appId, YPSDK.platformUrl, userUid, initParams);
        // console.log('20');
        // this.loadingIn = await this.getRemoteStorage();

        // if (this.isFail) return;

        // clearTimeout(this.failTimeId);
        // this.isLoad = true;

        // if (this.loadingIn) {
        //     console.log('走走服务器');
        //     this.initLocaSever();
        // } else {
        //     console.log('走走本地');
        //     this.initLoca();
        // }
    }

    /**
     * Handle Failed Server Action
     * @param callback - Callback Function
     * 建议方法名: handleFailedServer
     */
    public static failSever(callback: Function): void {
        // this.failTimeId = setTimeout(() => {
        //     this.isLoad = true;
        //     this.initLoca();
        //     callback();
        // }, 10000);
    }

    /**
     * Initialize Local Server
     * 建议方法名: initializeLocalServer
     */
    public static initLocaSever(): void {
        const localGameVersion: number = Number(localStorage.getItem('gameversion')) || 0;
        const serverGameVersion: number = this.nowServerData?.gameversion || 0;
        console.log('存储版本对比', `本地-> ${localGameVersion}`, `服务器-> ${serverGameVersion}`);

        if (serverGameVersion > localGameVersion) {
            GameDataMgr.initialize(this.nowServerData[GameDataMgr.getSecretKey()]);
            PlayerDataMgr.initialize(this.nowServerData[PlayerDataMgr.getSecretKey()]);
            HallMgr.initialize(this.nowServerData[HallMgr.getSecretKey()]);
            localStorage.setItem('gameversion', String(serverGameVersion));
        } else {
            this.initLoca();
        }
    }

    /**
     * Initialize Local Data
     * 建议方法名: initializeLocalData
     */
    public static initLoca(): void {
        GameDataMgr.initialize();
        PlayerDataMgr.initialize();
        HallMgr.initialize();
    }

    /**
     * Access User Information
     * @param accessParams - Parameters for Accessing User Information
     * @returns Promise with the result
     * 建议方法名: accessUserInfo
     */
    public static async accesUserinfo(accessParams: any): Promise<any> {
        return new Promise((resolve) => {
            // HttpMgrInstance.requestData((response: any) => {
            //     LogMgr.debug('---accesUserinfo(加钱)-->>>>>>res------', response);
            //     const errorCode = response?.errorCode?.code;
            //     if (errorCode === 'Success') {
            //         resolve(response);
            //     }
            // }, accessParams);
        });
    }

    /**
     * Get User Application Information
     * @param appId - Application ID
     * @param platformAppId - Platform Application ID
     * @returns Promise with user application information
     * 建议方法名: getUserApplicationInfo
     */
    public static async getUserAppInfo(appId: string, platformAppId: string): Promise<any> {
        return new Promise((resolve) => {
            resolve({});
            // const url: string = `${YPSDK.platformUrl}/User/AppInfo?appId=${appId}&platformAppId=${platformAppId}&code=`;

            // this.GetTimeAll++;
            // if (this.GetTimeAll < 4) {
            //     mg.login({
            //         success: async (loginResponse: any) => {
            //             console.log('获取code:', loginResponse.code);
            //             const fullUrl: string = `${YPSDK.platformUrl}/User/AppInfo?appId=${appId}&platformAppId=${platformAppId}&code=${loginResponse.code}`;
            //             console.log('userid', appId, platformAppId, fullUrl);

            //             let response = await this.accesUserinfo(fullUrl);
            //             if (!response) {
            //                 response = await this.accesUserinfo(fullUrl);
            //             }

            //             console.log('resp:', response);
            //             resolve(response);
            //         },
            //         fail: async (error: any) => {
            //             console.error('获取code失败:', error);
            //             const retryResponse = await this.getUserAppInfo(appId, platformAppId);
            //             resolve(retryResponse);
            //         }
            //     });
            // }
        });
    }

    /**
     * Map Switch JSON
     * @param mapData - Data to be mapped
     * @returns Mapped Data
     * 建议方法名: mapSwitchToJson
     */
    public static mapSwitchJson(mapData: Map<string,any>): Record<string, any> {
        const mappedResult: Record<string, any> = {};
        mapData.forEach((value, key) => {
            mappedResult[key] = value;
        });
        return mappedResult;
    }

    /**
     * Clean Data
     * @param callback - Callback function to be executed after cleaning
     * 建议方法名: cleanAllData
     */
    public static cleanData(callback: Function): void {
        localStorage.clear();
        this.saveSeverStorage(true, callback);
    }

    /**
     * Get All Data
     * @returns All Data
     * 建议方法名: fetchAllData
     */
    public static getAllData(): Record<string, any> {
        const playerData = PlayerDataMgr.getAllData();
        const gameData = GameDataMgr.getAllData();
        const hallData = HallMgr.getAllData();

        const result: Record<string, any> = {
            [PlayerDataMgr.getSecretKey()]: this.mapSwitchJson(playerData),
            [GameDataMgr.getSecretKey()]: this.mapSwitchJson(gameData),
            [HallMgr.getSecretKey()]: this.mapSwitchJson(hallData)
        };

        const gameVersion = Number(localStorage.getItem('gameversion')) || 0;
        result.gameversion = gameVersion;

        return result;
    }

    /**
     * Check if Data is Empty
     * @param checkData - Data to be checked
     * @returns True if data is empty, false otherwise
     * 建议方法名: isDataEmpty
     */
    public static isEmpty(checkData: any): boolean {
        if (typeof checkData === 'object') {
            return !Object.keys(checkData).length;
        }
        return checkData == null || checkData === 'null' || checkData === 'undefined' || checkData === '';
    }

    /**
     * Transform Data to JSON String
     * @param transformData - Data to be transformed
     * @returns JSON String
     * 建议方法名: transformDataToJson
     */
    public static transformData(transformData: any): string {
        if (this.isEmpty(transformData)) {
            transformData = {};
        }
        return JSON.stringify(transformData);
    }

    /**
     * Parse JSON String to Data
     * @param jsonData - JSON String to be parsed
     * @returns Parsed Data
     * 建议方法名: parseJsonToObject
     */
    public static dataFormTrans(jsonData: string): any {
        if (this.isEmpty(jsonData)) {
            return {};
        }
        return JSON.parse(jsonData);
    }

    /**
     * Save Server Storage
     * @param forceSave - Force saving of data
     * @param callback - Callback function to be executed after saving
     * @returns Promise resolving upon completion
     * 建议方法名: saveServerStorage
     */
    public static async saveSeverStorage(forceSave: boolean = false, callback: Function | null = null): Promise<void> {
        callback && callback();
        // if (
        //     YPSDK.Common.curChannelData.platformType !== YPSDK.GamePlatformType.WX &&
        //     YPSDK.Common.curChannelData.platformType !== YPSDK.GamePlatformType.TT
        // ) {
        //     if (callback) callback();
        //     return;
        // }

        // const currentTimeDiff = new Date().getTime() - this.offTime;
        // if (currentTimeDiff > 1000 * $gameGlobalVariable.GameGlobalVariable.severdatatime || forceSave) {
        //     this.offTime = new Date().getTime();
        //     console.log('存档调用时间差', currentTimeDiff);

        //     let dataToSave = {};
        //     if (!forceSave) {
        //         dataToSave = this.getAllData();
        //     }

        //     const serializedData = this.transformData(dataToSave);
        //     const saveResult = await $yPNetStorage.YPNetStorage.setStorage('user', serializedData);

        //     console.log('存档结果', saveResult, serializedData);
        //     if (callback) callback();
        // }
    }

    /**
     * Get Remote Storage
     * @returns True if remote storage is available, false otherwise
     * 建议方法名: fetchRemoteStorage
     */
    public static async getRemoteStorage(): Promise<boolean> {

        return false;
        // const storageKey = 'user';
        // // console.log('======>>>>   是否有 本地缓存  ======>>>>', $yPNetStorage.YPNetStorage.isHaveLocalCache());

        // let storageData = null;
        // if (
        //     true
        //     // YPSDK.Common.curChannelData.platformType === YPSDK.GamePlatformType.WX ||
        //     // YPSDK.Common.curChannelData.platformType === YPSDK.GamePlatformType.TT
        // ) {
        //     try {
        //         // const userInfo = await this.getUserAppInfo(YPSDK.appId, YPSDK.Common.curChannelData.appId);
        //         // console.log('获取用户信息', userInfo);

        //         // const openid = userInfo.data.openid;
        //         // const unionid = userInfo.data.unionid;
        //         // console.log('openid', openid);
        //         // console.log('unionid', unionid);

        //         // $yPNetStorage.YPNetStorage.initUseKey(openid);
        //         // storageData = await $yPNetStorage.YPNetStorage.getStorageData(storageKey);
        //         console.log('======>>>>   云存档数据-【未登录-设置UserKey-获取】  ======>>>>', storageData);
        //     } catch (error) {
        //         console.log('getRemoteStorage', error);
        //     }
        // } else {
        //     cc.sys.isBrowser;
        // }

        // if (storageData) {
        //     this.nowServerData = this.dataFormTrans(storageData);
        //     return true;
        // } else {
        //     return false;
        // }
    }
}

export { GameNetworkManager };